home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 6: Level 6
/
17 Bit - Level 6 (1998)(Epic Marketing)[!].iso
/
!applications!
/
symphonie
/
dsplugin
/
dsp plugin docs.txt
< prev
next >
Wrap
Text File
|
1994-04-11
|
7KB
|
237 lines
V 0.1 First Release
$VER V 0.2 Bug fixed in DSPGuiAnalyzer (Strings needed two zerobytes at the end instead of one !)
-----------------------------------------------------------------------------
The DSP PlugIn System gives programmers the ability to design DSP algorithms
for MOTOROLA 68k processors. The programmers don't have to care about
nothing but the dsp algorithm to implement.
It should be easy to use the DspPlugIns in other 68k Motorola
Systems like AHI or Applications with minimal change to the source. :)
You can do:
- Any type of Scopes or spectrum analyzers
- Soundcard Support plugins (Are difficult -> Sync)
- Hall, Delay, Filters, Compressors ...
- Overload analyzers, Correlation analyzers
- Denoising Systems, Declicking Systems
- Smoothing algorithms
...
To try out a DSP plugin do the following:
1. Load Symphonie Player Pro (Symphonie Jr not yet supported for plugins)
2. Make the System Control Window as large as possible
3. Load a DSP Plugin (lower most gadgets)
4. Select |ON| to run the PlugIn
This is just a short text. Look at it as BETA release.
Experienced programers will have no problem in finding
their ways by simply examining the example sources.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
The following text describes the functions of
the SuperSupportTable. The SuperSupportTable is a
mixed list of subjumps and data. Do never use
subjumps not documented !
-----------------------------------------------------------------------------
LIBRARY SECTION : CONTAINS THE ADRESS OF SUBROUTINES
-----------------------------------------------------------------------------
SST_SYS_GetMem EQU 0
;Get Memory
;I(A0L)(MEMBLOCK_PTR) INPUT
;O(D0L)(0=ERROR) OUTPUT
;MEMBLOCK EXAMPLE:
memblock dc.l 0 ;Ptr to memory (0= memory has been freed)
dc.l 1024 ;Length in Bytes
dc.l 1 ;Flags MEMF_PUBLIC = 1
SST_SYS_FreeMem EQU 4
;Free Memory
;If the memblock has already been freed, it wont free again !
;I(A0L)(MEMBLOCK_PTR)
;O()
SST_FILE_RequestFileName EQU 100
;Get Filename using reqtools.library
;I(A0L)(RequestText_PTR)
;O(D0W)(0=Cancel)
SST_FILE_SetReqPattern EQU 104
;Set Pattern for Filerequester
;I(A0L)(PatternText_PTR)
;O()
e.g. Pattern_TXT dc.b "#?.SymDSP",0
SST_FILE_SetReqDir EQU 108
;Set Filerequester path
;I(A0L)(Dir_TXT)
SST_FILE_GetFileName EQU 112
;Get requested FileName
;I()
;O(A0L)(Filename_PTR)
SST_FILE_GetFileLen EQU 116
;I(A0L)(Filename_PTR)
;O(D0L)(FileLength in Bytes)
SST_GFX_AssistText EQU 200
;Print Text
;I(A0L)(Text_PTR)
;O()
SST_GFX_AssistDecLong EQU 204
;I(D0L)(Value)
;O()
SST_GFX_AssistDecByte EQU 208
;I(D0B)(Value)
;O()
SST_GFX_AssistHexLong EQU 212
;I(D0L)(Value)
;O()
SST_AUDIO_GetChunkLen EQU 400
;O(D0L)(SampleStreamChunk Length in Samples)
;O()
;1 Sample = 2x16 Bit Samples = 32 Bits
-----------------------------------------------------------------------------
DATA SECTION : POINTERS TO LIBS and SCREEN
-----------------------------------------------------------------------------
SST_PTR_EXECBASE EQU 1600 ;Contains PTR to EXECBASE
SST_PTR_INTBASE EQU 1604
SST_PTR_DOSBASE EQU 1608
SST_PTR_ASLBASE EQU 1612
SST_PTR_REQTOOLSBASE EQU 1616
SST_PTR_GFXBASE EQU 1620
SST_PTR_Screen EQU 1650 ;Contains PTR to SCREEN
-----------------------------------------------------------------------------
DATA SECTION : CONTAINS DATA, some of it with realtime update from the
SymphonieOS
-----------------------------------------------------------------------------
SST_ADR_ProcessorFlags EQU 1800
SST_ADR_SystemFrequency EQU 1804
SST_ADR_SystemBpm EQU 1808
SST_ADR_ChunkLen EQU 1812 ;in Samples
SST_ADR_OversampleFlag EQU 1816
SST_ADR_MaxAmplitude EQU 1820 ;$7fff in SymPRO
SST_ADR_BitPerSample EQU 1824 ;16 for 2x16 Bit Stream
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Notes:
-----------------------------------------------------------------------------
Do only use PC relative Assembler. (Have a look at the example sources)
You can use 020+ Opcodes.
Save it as ABSOLUTE CODE / RAW CODE !
If you compile the given sources, you have to
get identical PlugIns.
If you use your own windows, use GetMsg in the DSPLIB:RefreshGraph
to get window messages. Don't use Wait or the System might wait twice.
Use OpenWindow in InitDSP
and CloseWindow in CleanUpDSP
OR
Use OpenWindow in StartDSP
and CloseWindow in StopDSP
All GFX Update MUST take place in RefreshGraph
NOT WITHIN ProcDsp !!
ProcDsp is called within an interrupt -> so make your
algorithms as fast as possible (or even faster ) :))
All interrupt limitations apply !!! Take care !
Within ProcDsp you are NOT allowed to do
anything but calculate some stuff - thats it.
To do a scope e.g. You have to copy data to a buffer and
then do the gfx stuff in RefreshGraph. The same is
for very slow algorithms e.g. FFT analyzer
For advanced DSP algorithms you will most of
the time have to install a ringbuffer.
The Delay example does this.
The DSP GUI can only handle positive values YET.
To get memory protection do use the alloc mem free mems
of the SuperSupportTable.
-----------------------------------------------------------------------------
This is the DSP library, all functions must be valid,
they must at least point to a RTS.
InitDSP and GetDspTitle also need parameters
which have to be present !
In ProcDsp you have to save all registers used.
-----------------------------------------------------------------------------
DSPLIB DEF
-----------------------------------------------------------------------------
jmp InitDSP(PC) ;Allocate Mem, Build your Tables, Open Wins
jmp CleanUpDSP(PC) ;Free Mem, Close Wins
jmp ProcDsp(PC) ;Process DSP algorithm (IN interrupt !!)
jmp GetDspTitle(PC) ;Get DSP algorithm Title
jmp ModifyValue(PC) ;notify changed Value
jmp GraphSizeModify(PC) ;notify graph size has changed (not yet implemented)
jmp RefreshGraph(PC) ;notify its time for a GFX update
jmp StartDSP(PC) ;notify start (User pressed |ON| )
jmp StopDSP(PC) ;notify stop (User pressed |OFF| )
dc.l -1 ;-1 MUST BE PRESENT
If you find a bug in the docs or the DspPlugIn System
contact Patrick_Meng@augs1.augs.use.ch
Note its all beta, but its already fully functional.
The DSP PlugIn Gui for RAPID PROTOTYPING will change
for sure.